‘**********************************
‘ Perpetual Calendar
‘Copyright 1984, Michael Steiner, All Commercial Rights Reserved 26
Oct 84
‘Permission is granted to use, copy, and modify this program for your
own personal use
‘Modified and comments by David Kelly
‘**********************************
WINDOW 1,””,(0,12)-(512,342),3 ‘Open full screen window
sm=1:em=12 ‘Initial start and end months
oldsm=sm:oldem=em
DIM status (2,12)
FOR i = 5 TO 1 STEP -1 ‘Erase all the basic menus
MENU i,0,0,””
NEXT i
instructions:
WINDOW 2,””,(3,70)-(509,270),3 ‘Open 2nd window
WIDTH 62
PRINT
PRINT”This program will generate a calendar for any year from 1753
onward.”
PRINT”You may choose whether you want to display Julian Dates as
well as the days ofthe month. You may select to print the whole year
or you may choose starting and ending months.”
PRINT:PRINT”Click OK when you have finished reading these
instructions.”
BUTTON 1,1,”OK”,(210,150)- (250,170),1 ‘ Set up button #1
WHILE DIALOG(0) <>1 :WEND ‘ Wait for button #1
setup:
WINDOW 2,””,(50,100)-(450,200),2 ‘Change 2nd window and open it
TEXTFACE (1)
MOVETO 250,15:PRINT”Show Julian”:MOVETO 250,30:PRINT “Date?”
BUTTON 1,1,”Yes”,(250,40)-(300,60),3 ‘Set up buttons
BUTTON 2,2,”No”,(250,65)-(290,85),3
BUTTON 3,2,”Print Entire year”, (50,60)-(200,80),2
BUTTON 4,1,”OK”,(360,60)-(390,80),1
MOVETO 50,40:PRINT”Year”
TEXTFACE (0)
EDIT FIELD 1,RIGHT$(DATE$,4), (90,30)-(130,45),2 ‘Set up Edit
field with current year
DATA January, February, March, April, May, June, July, August,
September, October, November, December
DIM month$(12)
FOR i = 1 TO 12:READ month$(i):NEXT i ‘Read the months
BStatus=1:GOSUB EntireYear
DialogActive = 1
WHILE DialogActive
EventType = DIALOG(0) ‘See if a button is pressed
IF EventType = 1 THEN GOSUB ButtonEvent
MenuId = MENU(0) ‘See which menu is selected
IF MenuId THEN GOSUB ChooseMonth
WEND
Year = VAL(EDIT$(1)):IF Year < 1753 THEN Year = 1753 ‘Get year
data
WINDOW CLOSE 2
calendar:
MENU 1,0,0,”” ‘Clear menu 1
MENU 2,0,0,”” ‘Clear meun 2
BUTTON 1,1,”Continue”, (50,305)-(125,325),1 ‘Set up button 1
BUTTON 2,1,”Quit”,(350,305)- (400,325),1 ‘Set up button 2
TEXTSIZE(12):TEXTFACE(0): TEXTMODE(1) ‘Set font attributes
DATA 31,28,31,30,31,30,31,31,30, 31,30,31
DIM dm(12):FOR mo=1 TO 12: READ dm(mo):NEXT mo ‘Read # of
days/month
DIM M$(12) :FOR MO=1 TO 12: M$(MO)=month$(MO) :NEXT MO
DATA SUN,MON,TUE,WED,THU,FRI,SAT
DIM DAY$(7):FOR DAY = 1 TO 7: READ DAY$(DAY):NEXT DAY ‘Read days
of week
DM(2) =DM(2) -(YEAR/4 =INT(YEAR/4)) +(YEAR/100= INT(YEAR/100))
-(YEAR/400= INT(YEAR/400)) ‘Add a day for leap year
DIM jd(12)
FOR i= 1 TO 12: jd(i)=jd(i-1)+ dm(i-1):NEXT I
Y= INT(((365.25*YEAR+jd(sm))/7- INT((365.25*YEAR+jd(sm))/7))*7-
1.2499999#)
IF Y<0 THEN Y=Y+7
CALL PENSIZE (3,3)
FOR M=sm TO em
dy=jd(m)
CLS’ Draw the calendar
FOR I = 1 TO 7:LINE (5,I*40+10)- (481,I*40+10):NEXT I
FOR I = 0 TO 7:LINE (I*68+5,50)- (I*68+5,290):NEXT I
TEXTSIZE (24): TEXTFACE (17)’ Set calendar font attributes
CALL MOVETO (130,34): PRINT M$(M);” “;YEAR;
TEXTSIZE (12):TEXTFACE(1)
FOR I= 0 TO 6: CALL MOVETO (I*68+10,49): PRINT DAY$(I+1):NEXT I
FOR DM = 1 TO DM(M)
TEXTFACE(9):TEXTSIZE(18)
CALL MOVETO (Y*68,X+71):PRINT DM: IF JU THEN GOSUB JulianPrint
Y=Y+1:IF Y>6 THEN Y=0:X = X+40
NEXT dm
WHILE DIALOG(0) <> 1 :WEND ‘Wait for button press
IF DIALOG(1)=2 THEN M=em
X=0
NEXT M
EndRoutine: ‘Set up End menu
WINDOW CLOSE 1
MENU 1,0,1,”Options”
MENU 1,1,1,”Re-run Program”
MENU 1,2,1,”Exit to Finder”
WHILE MENU(0) = 0:WEND ‘Wait till selection is made
IF MENU(1)=1 THEN RUN : ELSE SYSTEM ‘Return to Finder
ButtonEvent:
ButtonId = DIALOG(1)
IF ButtonId=4 THEN DialogActive=0
ON ButtonId GOSUB Julian, NoJulian, EntireYear
RETURN
Julian: ‘Set button for Julian year print
BUTTON 1,2
BUTTON 2,1
JU=-1
RETURN
NoJulian: ‘Set button for Julian no print
BUTTON 1,1
BUTTON 2,2
JU=0
RETURN
EntireYear: ‘Set beginning month to Jan. & Ending month to Dec.
IF BStatus = 1 THEN BStatus =2:sm=1:em=12:ELSE BStatus = 1
FOR ms = 1 TO 2:FOR st= 0 TO 12: status(ms,st)=ABS((BStatus=1)):
NEXT st,ms
BUTTON 3,BStatus
MENU 1,0,status(1,0),”Starting Month”
FOR i= 1 TO 12
MENU 1,i,status (1,i),month$(i)
NEXT i
MENU 1,sm,2,month$(sm)
Endmonth:
MENU 2,0,status(2,0),”Ending Month”
FOR i = 1 TO 12
MENU 2,i,ABS(sm<(i+1)),month$(i)
NEXT i
IF em >= sm THEN MENU 2,em,2,month$(em)
RETURN
ChooseMonth:
ItemId = MENU(1)
IF MenuId=1 THEN oldsm=sm: sm=ItemId:MENU 1,0,1: MENU
1,sm,2,month$(sm): IF oldsm<>sm THEN MENU 1,oldsm,1,month$(oldsm)
IF MenuId=1 THEN GOSUB EndMonth
IF MenuId=2 THEN oldem=em: em=ItemId: MENU 2,0,1: MENU
2,em,2,month$(em):IF oldem<>em OR oldem> sm THEN MENU 2,oldem,
ABS(oldem>=sm),month$(oldem)
IF em
RETURN
JulianPrint: ‘Print Julian year
dy=dy+1
dy$=RIGHT$(STR$(year),1)+ RIGHT$(“00”+MID$(STR$(dy),2),3)
dy=VAL(dy$)
TEXTSIZE (12):TEXTFACE (0)
CALL MOVETO (Y*68+10,X+85)
PRINT dy$;
RETURN